package handler

import (
	"context"
	"encoding/json"
	"getCapCha/model"
	getCapCha "getCapCha/proto/getCapCha"
	"github.com/afocus/captcha"
	_ "github.com/micro/go-micro/util/log"
	"image/color"
	"log"
)

type GetCapCha struct{}

// Call is a single request handler called via client.Call or the generated client code
func (e *GetCapCha) Call(ctx context.Context, req *getCapCha.Request, rsp *getCapCha.Response) error {
	cap := captcha.New()
	// 设置字体
	// TODO 文件路径打开不对
	// fmt.Println("C:/goproject/microservice/service/getCapCha/conf/comic.ttf")
	err := cap.SetFont("C:/goproject/microservice/service/getCapCha/conf/comic.ttf")
	if err != nil {
		log.Println(err)
		return err
	}
	// 设置验证码大小
	cap.SetSize(128, 64)
	// 设置干扰强度
	cap.SetDisturbance(captcha.NORMAL)
	// 设置前景色 可以多个 随机替换文字颜色 默认黑色
	cap.SetFrontColor(color.RGBA{255, 255, 255, 255})
	// 设置背景色 可以多个 随机替换背景色 默认白色
	cap.SetBkgColor(color.RGBA{255, 0, 0, 255}, color.RGBA{0, 0, 255, 255}, color.RGBA{0, 153, 0, 255})
	img, str := cap.Create(4, captcha.NUM)

	// 存储图片验证码到redis中
	err = model.SaveImageCode(str, req.Uuid)
	if err != nil {
		log.Println(err)
		return err
	}
	imgBuf, err := json.Marshal(img)
	// 将imgBuf使用resp传出
	rsp.Img = imgBuf
	return err
}
